home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
011-020
/
amok19
/
area
/
area.dok
< prev
next >
Wrap
Text File
|
1993-11-04
|
2KB
|
54 lines
===========================================================
Dokumentation des Moduls Area V1.0 Bernd Preusing 7.5.89
===========================================================
Das Modul Area enstand aus drei Gründen:
a) ist es nicht ganz trivial, einen RastPort für Area-Operationen
zu initialisieren.
b) liefern die Area-Funktionen der graphics.library ein Ergebnis,
das immer überprüft oder ignoriert werden muß.
c) enthält die grahics.library einen (haha!) Fehler, der immer
dann auftritt, wenn nacheinander Polygone und Ellipsen gefüllt
werden, was in die tollsten Abstürze mündet.
Für a) (Initialisierung) gibt es nun:
PROCEDURE InitArea(Rp: RastPortPtr; MaxVectors: INTEGER; Alloc: AllocProc);
(* :Input. Rp: zu initialisierender RastPort
:Input. MaxVectors: maximale Punktzahl vor AreaEnd. Falls
:Input. mehr benötigt werden: Assert.
:Input. Eine Ellipse benötigt nur 2 Punkte, 20
:Input. bis 50 reicht also allemal!
:Input. Alloc: Prozedur zur Speicheranforderung (z.B. Heap.AllocMem)
:Semantic. Der RastPort wird für Area-Operationen initialisiert,
:Semantic. alle nötigen Puffer werden alloziert. Die Verantwortung
:Semantic. für die Speicherfreigabe muß eine TermProcedure tragen!
*)
Man ruft also einfach EINMAL z.B. 'InitArea(MyRastPort,50,AllocMem)'
auf, und schon sind die tollsten Fülleffekte möglich. Siehe hierzu auch
die Module LoPattern und HiPattern!
Für b) (Resultate) sind da:
PROCEDURE AreaMove(Rp: RastPortPtr; x,y: INTEGER);
PROCEDURE AreaDraw(Rp: RastPortPtr; x,y: INTEGER);
PROCEDURE AreaEllipse(Rp: RastPortPtr; mx,my,rx,ry: INTEGER);
PROCEDURE AreaCircle(Rp: RastPortPtr; mx,my, r: INTEGER);
PROCEDURE AreaEnd(Rp: RastPortPtr);
Diese sind genau wie die der graphics.library, liefern jedoch kein
Ergebnis, sondern im Fehlerfalle ein Arts.Assert.
AreaEnd bereinigt zusätzlich einen Puffer, womit Fehler c) ausge-
schlossen wird.
Leider gibt es aber noch einen (haha!) Fehler, den ich noch nicht
genau lokalisieren konnte:
Trotz 'geclipptem' RastPort (z.B. Window) gibt es MANCHMAL Abstürze,
wenn Fülloperationen ganz oder teilweise außerhalb der Grenzen
stattfinden. Diese treten jedoch sinnigerweise meist erst etwas
später in Erscheinung, was sie um so tragischer macht.